Multi-core embedded systems are mainstream products. Multi-core chips allow different processing tasks to execute in parallel while accessing a set of shared hardware resources, including main memory, buses, caches, and input/output (I/O) peripherals. Unfortunately, when one or more of these resources is utilized to its saturation point, severe and unpredictable inter-core interference can heavily impact the system's behavior. Thus, unregulated contention of shared resources induces significant execution time variance. Hence, specific mechanisms to manage and schedule access to shared resources should be designed and validated.
This problem has been approached from different perspectives such as new multi-core hardware platforms, as well as new operating system techniques involving shared resource partitioning and management on commercial-off-the-shelf (COTS) hardware platforms. While a pure hardware solution might be desirable to meet the needs of modern real-time systems, it is not viable in the short term. Conversely, enforcing schedule determinism in software on a general-purpose COTS architecture may sacrifice performance for temporal predictability of task execution.
Modern real-time operating systems were designed for single-core platforms, where the use of real-time scheduling policies, efficient inter-process communication, and prioritized interrupt handling were enough to ensure temporal predictability. Support for multi-core platforms was later introduced without a substantial change in design, resulting in a new set of challenges (mainly related to shared hardware resource management) when trying to achieve temporal predictability on multi-core systems.